package org.example.stack;

import java.util.Stack;

public class Calculate {
    /**
     * 给你一个字符串表达式 s ，请你实现一个基本计算器来计算并返回它的值。
     *
     * 整数除法仅保留整数部分。
     *
     * 你可以假设给定的表达式总是有效的。所有中间结果将在 [-231, 231 - 1] 的范围内。
     *
     * 注意：不允许使用任何将字符串作为数学表达式计算的内置函数，比如 eval() 。
     * 示例 3：
     *
     * 输入：s = " 3+5 / 2 "
     * 输出：5
     * @param s
     * @return
     */
    public int calculate(String s) {
        char prev = '+';
        int tmp = 0;
        Stack<Integer> stack = new Stack<>();
        for(int i=0; i<s.length(); i++){
            char ch = s.charAt(i);
            if(ch >='0' && ch <= '9'){
                tmp = tmp*10 + ch-'0';
            }
            // 修改条件：处理运算符或者最后一个字符
            if(i == s.length()-1 || (ch != ' ' && (ch < '0' || ch > '9'))){
                switch(prev){
                    case '+': stack.push(tmp); break;
                    case '-': stack.push(-tmp); break;
                    case '*': stack.push(tmp * stack.pop()); break;
                    case '/': stack.push(stack.pop() / tmp); break;
                }
                tmp = 0;
                prev = ch;
            }
        }
        int ret = 0;
        while(!stack.empty()){
            ret +=stack.pop();
        }
        return ret;
    }
}
